package com.example.socialapp.domain.usecase.auth

import com.example.socialapp.domain.model.User
import com.example.socialapp.domain.repository.AuthRepository
import javax.inject.Inject

/**
 * 用户注册用例
 */
class RegisterUseCase @Inject constructor(
    private val authRepository: AuthRepository
) {
    /**
     * 注册新用户
     *
     * @param email 用户邮箱
     * @param password 用户密码
     * @param confirmPassword 确认密码
     * @param displayName 显示名称
     * @param phoneNumber 手机号码（可选）
     * @return 成功返回User对象，失败返回异常
     */
    suspend operator fun invoke(
        email: String,
        password: String,
        confirmPassword: String,
        displayName: String,
        phoneNumber: String? = null
    ): Result<User> {
        // 验证邮箱
        if (email.isBlank()) {
            return Result.failure(IllegalArgumentException("邮箱不能为空"))
        }
        
        if (!isValidEmail(email)) {
            return Result.failure(IllegalArgumentException("邮箱格式不正确"))
        }
        
        // 验证密码
        if (password.isBlank()) {
            return Result.failure(IllegalArgumentException("密码不能为空"))
        }
        
        if (password.length < 6) {
            return Result.failure(IllegalArgumentException("密码长度不能少于6位"))
        }
        
        // 验证密码一致性
        if (password != confirmPassword) {
            return Result.failure(IllegalArgumentException("两次输入的密码不一致"))
        }
        
        // 验证用户名
        if (displayName.isBlank()) {
            return Result.failure(IllegalArgumentException("用户名不能为空"))
        }
        
        if (displayName.length < 2) {
            return Result.failure(IllegalArgumentException("用户名长度不能少于2位"))
        }
        
        // 验证手机号（如果提供）
        if (phoneNumber != null && phoneNumber.isNotBlank()) {
            if (!isValidPhoneNumber(phoneNumber)) {
                return Result.failure(IllegalArgumentException("手机号格式不正确"))
            }
        }
        
        // 调用仓库执行注册
        return authRepository.register(email, password, displayName)
    }
    
    /**
     * 验证邮箱格式
     *
     * @param email 邮箱
     * @return 是否有效
     */
    private fun isValidEmail(email: String): Boolean {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()
    }
    
    /**
     * 验证手机号格式
     *
     * @param phoneNumber 手机号
     * @return 是否有效
     */
    private fun isValidPhoneNumber(phoneNumber: String): Boolean {
        // 简单验证手机号格式，实际使用时可能需要更复杂的验证规则或第三方库
        return phoneNumber.matches(Regex("^1[3-9]\\d{9}$"))
    }
} 